home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 12: Textmags & Docs / nf_archive_12.iso / MAGS / SOURCES / ATARI_SRC.ZIP / atari source / HDX_BACK / HDX302.ST / ERROR.C < prev    next >
Encoding:
C/C++ Source or Header  |  2001-02-09  |  2.0 KB  |  92 lines

  1. /*
  2.  *    ERROR.C
  3.  *
  4.  *    26-May-1988    ml.    Started this.
  5.  *  14-Mar-1989 jye. add codes so that can differ what kind 
  6.  *                     driver currently deal with.
  7.  *
  8.  */
  9.  
  10. #include "osbind.h"
  11. #include "obdefs.h" 
  12. #include "mydefs.h"
  13. #include "addr.h"
  14. #include "error.h"
  15.  
  16. extern int typedev;
  17. extern int typedrv;
  18.  
  19. /*
  20.  *  Errcode()
  21.  *    Find error code for previous instruction which returned Check
  22.  *  Condition Status.
  23.  *
  24.  *  Input:
  25.  *    pdev - the physical device number (0 -> 7).
  26.  *  Return:
  27.  *    errnum - the error code.
  28.  */
  29. errcode(pdev)
  30. int pdev;
  31. {
  32.     char data[128];
  33.     extern long rqsense(), ostack;
  34.     UWORD errnum;
  35.     int mask = 0x0001;
  36.     int set, scsidrv;
  37.    
  38.     ostack = Super(NULL);
  39.     /* check #pdev device is set or not */
  40.     set = typedev & (mask << pdev);
  41.     scsidrv = typedrv & (mask << pdev);
  42.     if ((set)||(scsidrv)) {    /* if set, it is a removable driver */
  43.         errnum = rqsense(pdev, 16, data);
  44.     } else {    /* if not set, it is a not removable driver */
  45.            errnum = rqsense(pdev, 4, data);
  46.     }
  47.     delay();
  48.     Super(ostack);
  49.     
  50.     if (errnum != 0)
  51.         return err("[1][Fatal error][OK]");
  52.         
  53.     if ((set)||(scsidrv))    { /* if set, it is a removable driver */
  54.         errnum = (UWORD)data[12];
  55.     } else { /* if not set, it is a not removable driver */
  56.         data[0] &= 0x7f;        /* mask out advalid bit */
  57.         errnum = (UWORD)data[0];
  58.     }
  59.     return errnum;        /* return it */
  60. }
  61.  
  62.  
  63. /*
  64.  *  Tsterr()
  65.  *    Given an error code, test if it is a medium change error
  66.  *  or a write protection error.  Put up the appropiate box if
  67.  *  it is either one of those, and return OK.  
  68.  *    If it is not either of those, return ERROR.
  69.  *
  70.  */
  71. tsterr(errnum)
  72. UWORD errnum;
  73. {
  74.     switch(errnum) {
  75.         case MDMCHGD:
  76.             err(mdmchng);
  77.             break;
  78.         
  79.         case WRTPRTD:
  80.             err(wrprotct);
  81.             break;
  82.             
  83.         case DEVNRDY:
  84.             err(drvnrdy);
  85.             break;
  86.             
  87.         default:
  88.             return ERROR;
  89.     }
  90.     return OK;
  91. }
  92.